#ifndef CAPACITERACIALE_H
#define CAPACITERACIALE_H 1

#include "ADDArticleObjet.h"

/**
 * Gestion des capacités raciales. Permet d'associer à une capacité un
 * coût. Utiliser une classe plutôt qu'une struct permet d'avoir un
 * constructeur par défaut et un constructeur de copie. De plus, on a
 * le loisir de surcharger l'opérateur <<.
 *
 * Toutes ées fonctionnalités nécessaires sont en fait dans
 * ADDArticleObjet, donc ont ne déniti ici aucun attribut.
 *
 * @author Johan "Solo" Luisier
 */
class CapaciteRaciale : public ADDArticleObjet
{
 public:
  CapaciteRaciale( const std::string& capa = "", const unsigned& prix = 0 );
  CapaciteRaciale( const CapaciteRaciale& lsCapa );
  virtual ~CapaciteRaciale();
  CapaciteRaciale& operator=( const CapaciteRaciale& lsCapa );
  /**
   * Permet de réaliser l'affichage simple d'une CapaciteRaciale. Le
   * nom et le coût sont affichés.
   *
   * @param os flot de sortie sur lequel on veut écrire.
   * @param lsCapa capacité que l'on veut écrire.
   *
   * @return le flot os, modifié.
   */
  friend std::ostream& operator<<( std::ostream& os,
				   const CapaciteRaciale& lsCapa );
  /**
   * Permet de réaliser l'affichage simple d'une CapaciteRaciale. Le
   * nom et le coût sont affichés.
   *
   * @param flot instance de FlotMessage de sortie sur lequel on veut
   * écrire.
   * @param lsCapa capacité que l'on veut écrire.
   *
   * @return le flot os, modifié.
   */
  friend FlotMessage& operator<<( FlotMessage& flot,
				  const CapaciteRaciale& lsCapa );
};

const CapaciteRaciale& capaciteRacialeInconnue();

#endif // CAPACITERACIALE_H
